package com.titaniume.java1;



/**
 *@program: JavaSenior
 *@description: 使用同步机制将单例模式中的懒汉式改写为线程安全的
 *@author: renfei.huang
 *@create: 2021-09-29 14:32
 */
public class BankTest {

    public static void main(String[] args) {

//        Bank instanct1 =  Bank.getInstanct();
//        Bank instanct2 = Bank.getInstanct();
//        System.out.println(instanct1 == instanct2);




    }

}


class Bank {


    private Bank() {

    }

    private static Bank instanct = null;

    //多线程情况下 instanct 会被多次赋值

    public static Bank getInstanct() {

        //方式一： 效率稍差
//        synchronized (Bank.class) {
//            if (instanct == null) {
//                instanct = new Bank();
//            }
//            return instanct;
//        }

        //方式二： 效率更高  第一个线程给对象赋值后 后面的对象不需要一个个去等待
        //不会进第一个判断
        if (instanct == null) {

            synchronized (Bank.class) {

                if (instanct == null) {

                    return new Bank();
                }
            }
        }
        return instanct;
    }

}

